package com.example.myweb.Service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.time.Duration;

@Service
public class JwtBlacklistService {

    // 移除 static 关键字
    @Autowired
    private StringRedisTemplate redisTemplate; // 用于操作Redis的模板

    /**
     * 将JWT加入黑名单
     * @param token JWT字符串
     * @param expirationTimeInSeconds JWT的剩余有效期（秒），决定黑名单项在Redis中存活的时间
     */
    // 移除 static 关键字
    public void blacklistToken(String token, long expirationTimeInSeconds) {
        // 将token作为key，任意值（如"blacklisted"）作为value存入Redis
        // 设置过期时间与JWT的剩余有效期相同，这样Redis会自动清理过期的黑名单项
        redisTemplate.opsForValue().set(token, "blacklisted", Duration.ofSeconds(expirationTimeInSeconds));
        System.out.println("JWT已加入黑名单: " + token.substring(0, Math.min(token.length(), 20)) + "... (Expires in " + expirationTimeInSeconds + "s)");
    }

    /**
     * 检查JWT是否在黑名单中
     * @param token JWT字符串
     * @return 如果在黑名单中返回true，否则返回false
     */
    public boolean isBlacklisted(String token) {
        Boolean isMember = redisTemplate.hasKey(token);
        return isMember != null && isMember;
    }
}